<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>御姐系</title>
</head>
<body>
            <script>
                // 1 问
                // console.log(num);



                // 2 问
                console.log(num);  // undefined  坑 1
                var num = 10;
                // 相当于执行了以下代码
                var num;
                console.log(num);
                num = 10;
                // 只提升变量 不赋值






                // 3 问
                fn();
                function fn(){
                    console.log(11);
                }




                // 4 问
                fun();  // 报错 坑 2
                var fun = function(){   // 匿名函数 fun 是一个变量 
                    console.log(22);
                }
                // 相当于执行了以下代码
                var fun;
                fun();
                fun = function(){   
                    console.log(22);
                }



            </script>







     我们js引擎运行js分为两步 ： 预解析    代码执行 
             （1）预解析  js引擎会把js 里面所有的 var 还有 function 提升到当前作用域的最前面
             （2）代码执行  按照代码书写 的顺序 从上往下执行
     预解析分为  变量预解析 （变量提升） 和 函数预解析 （函数提升）
             （1）变量提升 就是把所有的变量 声明提升到当前的作用域最前面 不提升赋值操作
             （2）函数提升 就是把所有的函数声明提升到当前作用域最前面    不调用函数
</body>
</html>  